//package com.plian.system.service.tb.impl;
//
//import com.alibaba.fastjson.JSON;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
//import com.plian.Tools.CollectionUtil;
//import com.plian.Tools.DateUtil;
//import com.plian.Tools.pagedata.PageData;
//import com.plian.system.common.status.CheckStatus;
//import com.plian.system.config.YthTaskObserver;
//import com.plian.system.constant.sys.FormStatusConstant;
//import com.plian.system.constant.sys.FormTypeConstant;
//import com.plian.system.constant.tb.TripleStatusConstant;
//import com.plian.system.constant.yth.YthConstant;
//import com.plian.system.dao.sys.file.FileDao;
//import com.plian.system.entity.tb.TripleEvent;
//import com.plian.system.entity.tb.TripleEventDetail;
//import com.plian.system.mapper.tb.TripleEventMapper;
//import com.plian.system.mybatis.base.BaseServiceImpl;
//import com.plian.system.mybatis.support.Condition;
//import com.plian.system.service.sys.code.IFormCodeService;
//import com.plian.system.service.sys.file.FileService;
//import com.plian.system.service.sys.orgzation.IOrgService;
//import com.plian.system.service.sys.user.ISysUserService;
//import com.plian.system.service.tb.ITripleEventDetailService;
//import com.plian.system.service.tb.ITripleEventService;
//import com.plian.system.service.yth.IConferenceEventService;
//import com.plian.system.vo.tb.TripleEventVO;
//import com.plian.system.vo.yth.YthResult;
//import com.plian.system.wrapper.tb.TripleEventWrapper;
//import lombok.AllArgsConstructor;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.util.*;
//import java.util.stream.Collectors;
//
///**
// * @Author: Take-off
// * @Description: TODO 委内事项管理
// * @Date: 2022/12/28 2:24 PM
// * @Version: 1.0
// **/
//@Service
//@AllArgsConstructor
//public class TripleEventServiceImpl extends BaseServiceImpl<TripleEventMapper, TripleEvent> implements ITripleEventService {
//
//    private final ITripleEventDetailService tripleEventDetailService;
//
//    private final TripleEventWrapper tripleEventWrapper;
//
//    private FileDao fileDao;
//
//    private FileService fileService;
//
//    private IFormCodeService formCodeService;
//
//    private IConferenceEventService iConferenceEventService;
//
//    private IOrgService orgService;
//
//    private ISysUserService userService;
//    @Override
//    public boolean saveOrUpdate(TripleEvent tripleEvent) {
//        if (!Optional.ofNullable(tripleEvent.getEventStatus()).isPresent()) {
//            tripleEvent.setEventStatus(TripleStatusConstant.UNREVIEWED);
//        }
//        if (!Optional.ofNullable(tripleEvent.getId()).isPresent()) {
//            //todo code
//            tripleEvent.setEventNumber(formCodeService.getCodeName(FormTypeConstant.PF_TRIPLE_EVENT));
//            tripleEvent.setFormType(String.valueOf(FormTypeConstant.PF_TRIPLE_EVENT));
//        }
//        return super.saveOrUpdate(tripleEvent);
//    }
//
//
//    @Override
//    @Transactional(rollbackFor=RuntimeException.class)
//    public boolean deleteLogic(List<Long> ids) {
//        for (Long id : ids) {
//            TripleEvent tripleEvent = getById(id);
//            if (tripleEvent == null) {
//                return false;
//            }
//        }
//        boolean result = super.deleteLogic(ids);
//        if (result){
//            tripleEventDetailService.deleteByParentId(ids);
//        }
//        return result;
//    }
//
//    @Override
//    @Transactional(rollbackFor=RuntimeException.class)
//    public boolean submit(TripleEvent tripleEvent) {
//        boolean result = saveOrUpdate(tripleEvent);
//        if (result){
//            List<TripleEventDetail> tripleEventDetails = tripleEvent.getTripleEventDetails();
//            if (CollectionUtil.isNotEmpty(tripleEventDetails)){
//                for (TripleEventDetail eventDetail : tripleEventDetails){
//                    if (eventDetail.getId() != null &&
//                            Optional.ofNullable(eventDetail.getIsDeleted()).isPresent() && eventDetail.getIsDeleted().intValue() == 1) {
//                        tripleEventDetailService.removeById(eventDetail.getId());
//                    }else {
//                        eventDetail.setBaseEventId(tripleEvent.getId());
//                        tripleEventDetailService.saveOrUpdate(eventDetail);
//                    }
//                }
//            }
//        }
//        return result;
//    }
//
//    /**
//     * @Author: Take-off
//     * @Description: //TODO 修改状态
//     * @Date: 3:14 PM 2022/12/28
//     * @Param: [ids]
//     * @return: boolean
//     **/
//    @Override
//    @Transactional(rollbackFor=RuntimeException.class)
//    public boolean changeStatus(List<Long> ids,int type) {
//        List<TripleEvent> tripleEvents = new ArrayList<>();
//        for (Long id : ids) {
//            TripleEvent tripleEvent = getById(id);
//            if (tripleEvent == null) {
//                return false;
//            }else {
//                tripleEvent.setEventStatus(type);
//                tripleEvents.add(tripleEvent);
//            }
//        }
//        boolean result = super.updateBatchById(tripleEvents);
//        return result;
//    }
//
//    @Override
//    public TripleEventVO getDetailObj(TripleEvent tripleEvent) {
//        TripleEvent detail = getOne(Condition.getQueryWrapper(tripleEvent));
//        TripleEventVO tripleEventVO = tripleEventWrapper.entityToVO(detail);
//
//        //子项
//        List<TripleEventDetail> details = tripleEventDetailService.list(new LambdaQueryWrapper<TripleEventDetail>().eq(TripleEventDetail::getBaseEventId, tripleEventVO.getId()));
//        if (CollectionUtil.isNotEmpty(details)){
//            List<String> ids = details.stream().map(m -> m.getId() + "").collect(Collectors.toList());
//            try {
//                List<PageData> files = fileDao.findbyParentIds(ids);
//                Map<String, List<PageData>> childMap = files.stream().collect(Collectors.groupingBy(file -> file.getString("parentId")));
//                details.forEach(eventDetail ->{
//                    List<HashMap> hashMaps = new ArrayList<>();
//                    List<PageData> file = childMap.get(eventDetail.getId()+"");
//                    if (CollectionUtil.isNotEmpty(file)){
//                        file.forEach(m ->{
//                            fileService.setViewInfo(m);
//                            hashMaps.add(m);
//                        });
//                    }
//                    eventDetail.setDocList(hashMaps);
//
//                });
//
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//            tripleEventVO.setTripleEventDetails(details);
//        }
//        return tripleEventVO;
//    }
//
//    @Override
//    @Transactional(rollbackFor = RuntimeException.class)
//    public String saveTripleEventList(String data){
//        YthResult ythResult = new YthResult();
//        //成功的id集合
//        List<String> successIds = new ArrayList<>();
//        //失败的id集合
//        List<String> failIds = new ArrayList<>();
//        //失败的原因
//        List<String> failReasons = new ArrayList<>();
//        //将json字符串转换成list
//        List<TripleEvent> dataList = JSON.parseArray(data, TripleEvent.class);
//        if (CollectionUtil.isNotEmpty(dataList)){
//            //根据datasourceIds 查询出所有的数据
//            List<TripleEvent> list = list(new LambdaQueryWrapper<TripleEvent>().in(TripleEvent::getDataSourceId, dataList.stream().map(TripleEvent::getDataSourceId).toArray()));
//            //如果数据库中有数据，就更新，没有就新增
//            for (TripleEvent entity:dataList){
//                //id重复略过
//                if (CollectionUtil.isNotEmpty(list)){
//                    List<String> olIds = list.stream().map(TripleEvent::getDataSourceId).collect(Collectors.toList());
//                    String dataSourceId = entity.getDataSourceId();
//                    //判断数据库中是否有数据
//                    if (olIds.contains(dataSourceId)){
//                        for (TripleEvent oldEntity:list){
//                            if (dataSourceId.equals(oldEntity.getDataSourceId())){
//                                //判断status是否为0，如果是0，就更新，不是0，就不更新
//                                if (CheckStatus.checkCode(oldEntity.getStatus())){
//                                    successIds.add(dataSourceId);
//                                    entity.setId(oldEntity.getId());
//                                    entity.setDataSource(YthConstant.DATA_NINGBO);
//                                    saveOrUpdate(entity);
//                                    list.remove(oldEntity);
//                                    break;
//                                }else {
//                                    failIds.add(dataSourceId);
//                                    failReasons.add("dataSourceId:"+dataSourceId+"数据已提交且已经在流程中，无法更新");
//                                    break;
//                                }
//                            }
//                        }
//                    }else {
//                        //如果数据库中没有数据，就新增
//                        entity.setDataSource(YthConstant.DATA_NINGBO);
//                        saveOrUpdate(entity);
//                        successIds.add(entity.getDataSourceId());
//                    }
//                }else {
//                    //如果数据库中没有数据，就新增
//                    entity.setDataSource(YthConstant.DATA_NINGBO);
//                    saveOrUpdate(entity);
//                    successIds.add(entity.getDataSourceId());
//                }
//            }
//        } else {
//            failReasons.add("数据为空");
//        }
//        ythResult.setSuccessIds(successIds);
//        ythResult.setFailIds(failIds);
//        ythResult.setFailReason(StringUtils.join(failReasons, ";"));
//        //ythResult转换成json字符串
//        return JSON.toJSONString(ythResult);
//    }
//
//    @Override
//    @YthTaskObserver
//    public boolean saveTripleEvent(String date) {
//        boolean flag = true;
//        Date start = DateUtil.parse(date, DateUtil.PATTERN_DATE);
//        //获取数据
////        List<TripleEvent> tripleEvents = iConferenceEventService.getAllProject(start, DateUtil.plusDays(start, 1));
//        List<TripleEvent> tripleEvents = iConferenceEventService.getAllProject(null, null);
//        remove(Wrappers.<TripleEvent>lambdaQuery().eq(TripleEvent::getDataSource,3));
//
//        Map<String, String> orgSourceIds = orgService.getSourceId();
//        Map<String, String> userSourceIds = userService.getSourceId();
//        if(CollectionUtil.isNotEmpty(tripleEvents)){
//            List<TripleEvent> oldReforms = list(Wrappers.<TripleEvent>lambdaQuery().eq(TripleEvent::getDataSource, YthConstant.DATA_NINGBO)
//                    .in(TripleEvent::getDataSourceId, tripleEvents.stream().map(TripleEvent::getDataSourceId).collect(Collectors.toList())));
//            for (TripleEvent tripleEvent:tripleEvents){
//                String orgId = orgSourceIds.get(tripleEvent.getFillingUnitId());
//                if (StringUtils.isNotBlank(orgId)){
//                    tripleEvent.setFillingUnitId(orgId);
//                    tripleEvent.setCreateCompanyId(orgId);
//                }
//                String userId = userSourceIds.get(tripleEvent.getReportUser());
//                if (StringUtils.isNotBlank(userId)){
//                    tripleEvent.setReportUser(userId);
//                }
//                tripleEvent.setStatus(FormStatusConstant.FINISH);
//                if(CollectionUtil.isNotEmpty(oldReforms)){
//                    Optional<TripleEvent> reformOptional = oldReforms.stream().filter(m -> tripleEvent.getDataSourceId().equals(m.getDataSourceId())).findFirst();
//                    if (reformOptional.isPresent()) {
//                        TripleEvent oldReform = reformOptional.get();
//                        oldReform.setFillingUnitId(tripleEvent.getFillingUnitId());
//                        oldReform.setReportOffice(tripleEvent.getReportOffice());
//                        oldReform.setReportUser(tripleEvent.getReportUser());
//                        oldReform.setReportTime(tripleEvent.getReportTime());
//                        oldReform.setEventNumber(tripleEvent.getEventNumber());
//                        oldReform.setEventName(tripleEvent.getEventName());
//                        oldReform.setEventType(tripleEvent.getEventType());
//                        oldReform.setEventStatus(tripleEvent.getEventStatus());
//                        oldReform.setTripleEventDetails(tripleEvent.getTripleEventDetails());
//                        flag = updateById(oldReform);
//                    }
//                    else{
//                        flag = submit(tripleEvent);
//                    }
//                }else{
//                    flag = submit(tripleEvent);
//                }
//            }
//        }
//        return flag;
//    }
//}
